<script>
	import config from './config'
	import store from '@/store'
	import {
		getToken
	} from '@/utils/auth'

	export default {
		globalData: {
			audioContext: null // 用于存储 audio 实例
		},
		data() {
			return {
				// commonDialog: false,
				// message: "您有新的订单，请注意查收",
				// reconnectTimes: 0, // 重连次数
				// reconnectTimesMax: 0,
				// reconnectInterval: 1000 * 30, // 重连间隔5秒
				// url: 'https://www.sczyjk.top/ws/test',
				// ws: null,
				// timeout: 1000 * 50,
				// serverTimeoutObj: null,

				// socketTask: null,
				// messages: []

				socketTask: null, // WebSocket 实例
				reconnectTimes: 0, // 重连次数
				reconnectTimesMax: 5, // 最大重连次数
				reconnectInterval: 3000, // 重连间隔时间
				serverTimeoutObj: null, // 心跳检测定时器
				timer: null // 重连定时器
			}
		},
		onLaunch() {
			this.initApp()
			// 创建全局 audio 实例
			this.globalData.audioContext = uni.createInnerAudioContext();
			this.globalData.audioContext.src = 'https://www.sczyjk.top/prod-api/profile/upload/music/test.mp3'; // 设置默认音频
			this.globalData.audioContext.autoplay = false; // 不自动播放
		},
		mounted() {
			// this.connectWebSocket();
			this.beforeDestroys();
			this.url = 'https://www.sczyjk.top/ws/test'
			this.initWebSocket();
		},
		beforeDestroy() {
			this.beforeDestroy(); // 清理资源
		},
		// onLoad() {
		// 	this.initWebSocket(); // 页面加载时初始化 WebSocket
		// },
		// onUnload() {
		// 	this.beforeDestroys(); // 页面卸载时关闭 WebSocket
		// },
		onShow() {
			console.log('App 进入前台');
			this.checkWebSocketConnection(); // 检查 WebSocket 连接
		},

		onHide() {
			console.log('App 进入后台');
			this.checkWebSocketConnection(); // 检查 WebSocket 连接
			// if (this.ws) {
			// 	this.ws.close();
			// 	clearTimeout(this.timer);
			// 	clearInterval(this.serverTimeoutObj);
			// }
		},
		methods: {
			initWebSocket() {
				this.socketTask = uni.connectSocket({
					url: 'https://www.sczyjk.top/ws/test',
					success: () => {
						console.log('WebSocket 连接成功');
					},
					fail: (err) => {
						console.error('WebSocket 连接失败', err);
						this.reconnect();
					}
				});

				// 监听 WebSocket 打开事件
				this.socketTask.onOpen(() => {
					console.log('WebSocket 连接已打开');
					this.reset().start();
				});

				// 监听 WebSocket 错误事件
				this.socketTask.onError((err) => {
					console.error('WebSocket 连接发生错误', err);
					this.reconnect();
				});

				// 监听 WebSocket 关闭事件
				this.socketTask.onClose(() => {
					console.log('WebSocket 连接已关闭');
					this.reconnect();
				});

				// 监听 WebSocket 收到消息事件
				this.socketTask.onMessage((res) => {
					console.log('收到 WebSocket 消息:', res.data);
					let data = JSON.parse(res.data);
					console.log(data, 'datadatadata');

					const rows = uni.getStorageSync('technician');
					if (data.phoneNumbers) {
						const phoneArr = data.phoneNumbers.split(',');
						const abc = phoneArr.find((el) => el == rows.phoneNumber);
						if (abc) {
							this.globalData.audioContext.src = data.voiceUrl;
							this.globalData.audioContext.play();
							console.log(phoneArr, abc, rows.phoneNumber, '123123');
						}
					}
				});
			},


			// 重连逻辑
			reconnect() {
				if (
					this.reconnectTimesMax === 0 ?
					true :
					this.reconnectTimes < this.reconnectTimesMax
				) {
					// 最多重连 5 次
					this.timer = setTimeout(() => {
						this.reconnectTimes++;
						this.initWebSocket();
					}, this.reconnectInterval);
				} else {
					console.error('重连次数达到上限，不再尝试重连');
				}
			},

			// 重置心跳检测
			reset() {
				clearInterval(this.serverTimeoutObj);
				return this;
			},

			// 开始心跳检测
			start() {
				const self = this;
				this.serverTimeoutObj = setInterval(() => {
					if (self.socketTask && self.socketTask.readyState === 1) {
						console.log('连接状态，发送消息保持连接');
						self.socketTask.send({
							data: 'ping',
							success: () => {
								console.log('心跳消息发送成功');
							},
							fail: (err) => {
								console.error('心跳消息发送失败', err);
							}
						});
						self.reset().start(); // 如果获取到消息，说明连接是正常的，重置心跳检测
					} else {
						console.log('断开状态，尝试重连');
						self.initWebSocket();
					}
				}, 1000 * 50);
			},

			// 在组件销毁前关闭 WebSocket 连接
			beforeDestroys() {
				if (this.ws) {
					this.socketTask.close();
				}
				clearInterval(this.serverTimeoutObj);
				clearTimeout(this.timer);
			},

			// 检查 WebSocket 连接
			checkWebSocketConnection() {
				if (!this.ws || this.ws.readyState !== 1) {
					console.log('WebSocket 未连接，尝试重连');
					this.reconnect();
				}
			},

			//WebSocket
			// initWebSocket() {
			// 	this.ws = new WebSocket(this.url);

			// 	this.ws.onopen = () => {
			// 		console.log("WebSocket连接成功");
			// 		this.reset().start();
			// 	};
			// 	this.ws.onerror = () => {
			// 		console.log("WebSocket连接发生错误");
			// 		this.reconnect();
			// 	};
			// 	this.ws.onclose = () => {
			// 		console.log("WebSocket连接已关闭");
			// 		this.reconnect();
			// 	};
			// 	let _this = this;
			// 	this.ws.onmessage = function(event) {
			// 		console.log("收到WebSocket消息: ", JSON.parse(event.data));
			// 		let data = JSON.parse(event.data);
			// 		console.log(data, "datadatadata");
			// 		const rows = uni.getStorageSync('technician');
			// 		if (data.phoneNumbers) {
			// 			const phoneArr = data.phoneNumbers.split(',')
			// 			const abc = phoneArr.find(el => el == rows.phoneNumber)
			// 			if (abc) {
			// 				_this.globalData.audioContext.src = data.voiceUrl
			// 				_this.globalData.audioContext.play();
			// 				console.log(phoneArr, abc, rows.phoneNumber, '123123');
			// 			}
			// 		}

			// 	};
			// 	// 其他的ws事件处理...
			// },
			// reconnect() {
			// 	if (
			// 		this.reconnectTimesMax === 0 ?
			// 		true :
			// 		this.reconnectTimes < this.reconnectTimesMax
			// 	) {
			// 		// 最多重连5次
			// 		this.timer = setTimeout(() => {
			// 			this.reconnectTimes++;
			// 			this.initWebSocket();
			// 		}, this.reconnectInterval);
			// 	} else {
			// 		console.error("重连次数达到上限，不再尝试重连");
			// 	}
			// },
			// reset() {
			// 	clearInterval(this.serverTimeoutObj);
			// 	return this;
			// },
			// start() {
			// 	var self = this;
			// 	this.serverTimeoutObj = setInterval(() => {
			// 		if (self.ws.readyState === 1) {
			// 			console.log("连接状态，发送消息保持连接");
			// 			self.ws.send("ping");
			// 			self.reset().start(); // 如果获取到消息，说明连接是正常的，重置心跳检测
			// 		} else {
			// 			console.log("断开状态，尝试重连");
			// 			self.initWebSocket();
			// 		}
			// 	}, 1000 * 50);
			// },

			// beforeDestroys() {
			// 	if (this.ws) {
			// 		this.ws.close(); // 在组件销毁前关闭WebSocket连接
			// 	}
			// },
			// // 初始化应用
			initApp() {
				// 初始化应用配置
				this.initConfig()
				// 检查用户登录状态
				//#ifdef H5
				this.checkLogin()
				//#endif
			},
			initConfig() {
				this.globalData.config = config
			},
			checkLogin() {
				if (!getToken()) {
					this.$tab.reLaunch('/pages/login')
				}
			},
			// connectWebSocket() {
			// 	this.socketTask = uni.connectSocket({
			// 		url: 'https://www.sczyjk.top/ws/test',
			// 		success: () => {
			// 			console.log('WebSocket 连接成功');
			// 		},
			// 		fail: (err) => {
			// 			console.error('WebSocket 连接失败', err);
			// 		}
			// 	});

			// 	uni.onSocketOpen((res) => {
			// 		console.log('WebSocket 连接已打开');
			// 		this.sendMessage('Hello Server!');
			// 	});

			// 	uni.onSocketMessage((res) => {
			// 		console.log('收到服务器消息:', res.data);
			// 		const rows = uni.getStorageSync('technician');
			// 		if (res.data.phoneNumbers) {
			// 			const phoneArr = res.data.phoneNumbers.split(',')
			// 			const abc = phoneArr.find(el => el == rows.phoneNumber)
			// 			if (abc) {
			// 				_this.globalData.audioContext.src = res.data.voiceUrl
			// 				_this.globalData.audioContext.play();
			// 				console.log(phoneArr, abc, rows.phoneNumber, '123123');
			// 			}
			// 		}
			// 	});

			// 	uni.onSocketError((err) => {
			// 		console.error('WebSocket 错误:', err);
			// 	});

			// 	uni.onSocketClose((res) => {
			// 		console.log('WebSocket 连接已关闭');
			// 	});
			// },
			// sendMessage(message) {
			// 	uni.sendSocketMessage({
			// 		data: message,
			// 		success: () => {
			// 			console.log('消息发送成功');
			// 		},
			// 		fail: (err) => {
			// 			console.error('消息发送失败', err);
			// 		}
			// 	});
			// },
			// closeWebSocket() {
			// 	uni.closeSocket({
			// 		success: () => {
			// 			console.log('WebSocket 连接已关闭');
			// 		},
			// 		fail: (err) => {
			// 			console.error('关闭连接失败', err);
			// 		}
			// 	});
			// },

		}
	}
</script>

<style lang="scss">
	@import "uview-ui/index.scss";
	@import '@/static/scss/index.scss';
	@import '@/static/scss/uni.scss';
</style>